// 微软考的时候是困难题:停车场(lintcode上的题)https://www.lintcode.com/problem/498/
// 力扣上面的比较简单：https://leetcode.cn/problems/design-parking-system/description/
package main

func main() {
	// ParkingSystem对象的初始化和调用
	ps := NewParkingSystem(1, 1, 0)
	// carType 有三种类型：大，中，小，分别用数字 1， 2 和 3 表示
	ps.AddCar(1) // 返回 true ，因为有 1 个空的大车位
	ps.AddCar(2) // 返回 true ，因为有 1 个空的中车位
	ps.AddCar(3) // 返回 false ，因为没有空的小车位
	ps.AddCar(1) // 返回 false ，因为没有空的大车位，唯一一个大车位已经被占据了
}

// 简单变量多if版本
type ParkingSystem2 struct {
	car [4]int
}

// 参考k8s源码的话这里的初始函数命名是NewParkingSystem(big, medium, small int) *ParkingSystem{}
func NewParkingSystem(big, medium, small int) ParkingSystem2 {
	ps := ParkingSystem2{
		car: [4]int{0, big, medium, small},
	}
	return ps
}

func (ps *ParkingSystem2) AddCar(carType int) bool {
	if ps.car[carType] > 0 {
		ps.car[carType]--
		return true
	}
	return false
}
